home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1997 July
/
EnigmA AMIGA RUN 20 (1997)(G.R. Edizioni)(IT)[!][issue 1997-07 & 08][EAR-CD IV].iso
/
earcd
/
disk
/
cdrom
/
playtrac.lha
/
Source
/
Resource.s
< prev
Wrap
Text File
|
1997-04-08
|
21KB
|
1,246 lines
include 'exec/types.i'
include 'exec/memory.i'
include 'exec/interrupts.i'
include 'exec/io.i'
include 'exec/libraries.i'
include 'exec/execbase.i'
include 'exec/exec_lib.i'
include 'graphics/gfxbase.i'
include 'graphics/displayinfo.i'
include 'intuition/intuition.i'
include 'intuition/intuition_lib.i'
include 'devices/audio.i'
include 'devices/scsidisk.i'
include 'hardware/custom.i'
include 'hardware/intbits.i'
include 'hardware/dmabits.i'
include 'hardware/adkbits.i'
include 'hardware/cia.i'
include 'graphics/graphics_lib.i'
include 'dos/dos.i'
include 'dos/dos_lib.i'
include 'audio_driver.i'
include 'libraries/gadtools.i'
include 'libraries/gadtools_lib.i'
include 'resource.i'
section audio_code,code
;**********************************************************************
XDEF _StartResource
XDEF @StartResource
_StartResource
@StartResource
StartResource:
movem.l d0-d1/a0-a1,-(sp)
bsr ActivateNewResource
lea intuition_name(pc),a1
moveq #37,d0
moveq #E_PLACE|E_FATALERROR,d1
bsr R_OpenLibrary
move.l d0,_IntuitionBase
lea dos_name(pc),a1
moveq #37,d0
moveq #E_PLACE|E_FATALERROR,d1
bsr R_OpenLibrary
move.l d0,_DOSBase
lea graphics_name(pc),a1
moveq #37,d0
moveq #E_PLACE|E_FATALERROR,d1
bsr R_OpenLibrary
move.l d0,_GfxBase
lea gadtools_name(pc),a1
moveq #37,d0
moveq #E_PLACE|E_FATALERROR,d1
bsr R_OpenLibrary
move.l d0,_GadToolsBase
movem.l (sp)+,d0-d1/a0-a1
rts
graphics_name dc.b 'graphics.library',0
intuition_name dc.b 'intuition.library',0
dos_name dc.b 'dos.library',0
gadtools_name dc.b 'gadtools.library',0
;**********************************************************************
;Global Variables
cnop 0,4
_IntuitionBase dc.l 0
_DOSBase dc.l 0
_GfxBase dc.l 0
_GadToolsBase dc.l 0
originalStack dc.l 0
mainList dc.l 0
resList dc.l 0
resNext dc.l 0
;**********************************************************************
cnop 0,4
_LVOAllocBitMap EQU -$396
_LVOFreeBitMap EQU -$39C
;d0 = width
;d1 = height
;d2 = depth
;d3 = flags
XDEF _R_AllocBitMap
XDEF @R_AllocBitMap
_R_AllocBitMap
@R_AllocBitMap
R_AllocBitMap
movem.l d4-d7/a0-a1/a6,-(sp)
move.l d0,d4
move.l d1,d5
move.l d2,d6
move.w d3,d7
move.l _GfxBase(pc),a6
R_ABM1 moveq #11,d3
suba.l a0,a0
jsr _LVOAllocBitMap(a6)
move.l d0,d2
bne R_ABM2
lea r_abmErr(pc),a0
move.l d7,d0
bsr ProduceError
tst.w d0
beq R_ABM3
move.l d4,d0
move.l d5,d1
move.l d6,d2
bra R_ABM1
R_ABM2 andi.w #E_PLACE,d7
moveq #R_BITMAP,d0
moveq #rl_SIZEOF,d1
bsr Res_PlaceList
R_ABM3 move.l d2,d0
movem.l (sp)+,d4-d7/a0-a1/a6
rts
r_abmErr dc.b 'Could not create bitmap.',0
;**********************************************************************
cnop 0,4
;a0 = Screen Name
;d0 = flags
;return = d0
XDEF _R_LockPubScreen
XDEF @R_LockPubScreen
@R_LockPubScreen
_R_LockPubScreen
R_LockPubScreen
movem.l d1-d3/a5-a6,-(sp)
move.l a0,a5
move.l d0,d3
move.l _IntuitionBase,a6
RLS_1 jsr _LVOLockPubScreen(a6)
move.l d0,d2
bne RLS_2
lea r_lpsErr(pc),a0
move.l d3,d0
bsr ProduceError
tst.l d0
beq RLS_3
move.l a5,a0
bra RLS_1
RLS_2 andi.b #E_PLACE,d3
beq RLS_3
moveq #R_LOCKSCREEN,d0
moveq #rl_SIZEOF,d1
bsr Res_PlaceList
RLS_3 move.l d2,d0
movem.l (sp)+,d1-d3/a5-a6
rts
r_lpsErr dc.b 'Could not lock screen.',0
;**********************************************************************
cnop 0,4
;a0 = Window
;a1 = Menu structure
;d0 = flags
;no return
XDEF _R_SetMenuStrip
XDEF @R_SetMenuStrip
_R_SetMenuStrip
@R_SetMenuStrip
movem.l d1-d3/a4-a6,-(sp)
move.l d0,d3
move.l a0,a4
move.l a1,a5
move.l _IntuitionBase(pc),a6
RSM_1 jsr _LVOSetMenuStrip(a6)
tst.l d0
bne RSM_2
lea r_smsErr(pc),a0
move.l d3,d0
bsr ProduceError
tst.l d0
beq RSM_3
move.l a4,a0
move.l a5,a1
bra RSM_1
RSM_2 andi.w #E_PLACE,d3
beq RSM_3
move.l a5,d2
moveq #R_MENUSTRIP,d0
moveq #rl_SIZEOF,d1
bsr Res_PlaceList
RSM_3 movem.l (sp)+,d1-d3/a4-a6
rts
r_smsErr dc.b 'Could not set menu to window.',0
;**********************************************************************
cnop 0,4
;a0 = NewWindow
;a1 = TagList
;d0 = flags
;return = d0
XDEF _R_OpenWindowTags
XDEF @R_OpenWindowTags
_R_OpenWindowTags
@R_OpenWindowTags
movem.l d1-d3/a4-a6,-(sp)
move.l a0,a4
move.l a1,a5
move.l d0,d3
move.l _IntuitionBase(pc),a6
ROW_1 jsr _LVOOpenWindowTagList(a6)
move.l d0,d2
bne ROW_2
lea R_owErr(pc),a0
move.l d3,d0
bsr ProduceError
tst.l d0
beq ROW_3
move.l a4,a0
move.l a5,a1
bra ROW_1
ROW_2 andi.w #E_PLACE,d3
moveq #R_WINDOW,d0
moveq #rl_SIZEOF,d1
bsr Res_PlaceList
ROW_3 move.l d2,d0
movem.l (sp)+,d1-d3/a4-a6
rts
R_owErr dc.b 'Could not open window.',0
;**********************************************************************
cnop 0,4
;a0 = Screen
;a1 = TagList
;d0 = flags
;return = d0
XDEF _R_GetVisualInfo
XDEF @R_GetVisualInfo
_R_GetVisualInfo
@R_GetVisualInfo
movem.l d1-d3/a4-a6,-(sp)
move.l a0,a4
move.l a1,a5
move.l d0,d3
move.l _GadToolsBase(pc),a6
RGV_1 jsr _LVOGetVisualInfoA(a6)
move.l d0,d2
bne RGV_2
lea R_gviErr(pc),a0
move.l d3,d0
bsr ProduceError
tst.l d0
beq RGV_3
move.l a4,a0
move.l a5,a1
bra RGV_1
RGV_2 andi.w #E_PLACE,d3
beq RGV_3
moveq #R_VISUAL,d0
moveq #rl_SIZEOF,d1
bsr Res_PlaceList
RGV_3 move.l d2,d0
movem.l (sp)+,d1-d3/a4-a6
rts
R_gviErr dc.b 'Could not get Visual Information.',0
;**********************************************************************
cnop 0,4
;a0 = newMenu
;a1 = TagList
;d0 = flags
;return = d0
XDEF _R_CreateMenus
XDEF @R_CreateMenus
_R_CreateMenus
@R_CreateMenus
movem.l d1-d3/a4-a6,-(sp)
move.l a0,a4
move.l a1,a5
move.l d0,d3
move.l _GadToolsBase(pc),a6
RCM_1 jsr _LVOCreateMenusA(a6)
move.l d0,d2
bne RCM_2
lea R_cmErr(pc),a0
move.l d3,d0
bsr ProduceError
tst.l d0
beq RCM_2
move.l a4,a0
move.l a5,a1
bra RCM_1
RCM_2 andi.w #E_PLACE,d3
beq RCM_3
moveq #R_MENU,d0
moveq #rl_SIZEOF,d1
bsr Res_PlaceList
RCM_3 move.l d2,d0
movem.l (sp)+,d1-d3/a4-a6
rts
R_cmErr dc.b 'Could not menu structure.',0
;**********************************************************************
cnop 0,4
XDEF _OpenFile
XDEF @OpenFile
_OpenFile
@OpenFile
OpenFile:
;d1 = fileName
;d2 = accessMode
;d3 = flags
movem.l d4-d5/a0-a1/a6,-(sp)
move.l d1,d4
move.l d2,d5
move.l _DOSBase(pc),a6
OF_3 jsr _LVOOpen(a6)
move.l d0,d2
bne OF_1
lea OF_err1(pc),a0
lea textArea,a1
bsr StrCpy
move.l d4,a0
bsr StrCpy
lea OF_err2(pc),a0
bsr StrCpy
lea textArea,a0
bsr ProduceError
tst.w d0
beq OF_2
move.l d4,d1
move.l d5,d2
bra OF_3
OF_1 andi.b #E_PLACE,d3
beq OF_2
moveq #R_FILE,d0
moveq #rl_SIZEOF,d1
bsr Res_PlaceList
OF_2 move.l d2,d0
movem.l (sp)+,d4-d5/a0-a1/a6
rts
OF_err1 dc.b 'Could not open file "',0
OF_err2 dc.b '".',0
;**********************************************************************
cnop 0,4
;d0=memSize
;d1=memType
;d2.w=memFlags
;return = d0
;scrap registers d0,d1
XDEF _GetMem
XDEF @GetMem
_GetMem
@GetMem
GetMem:
movem.l d2/d5-d6/a0-a1/a6,-(sp)
move.l d0,d5
move.l d1,d6
move.l 4.w,a6
GM_1 jsr _LVOAllocMem(a6)
exg d0,d2
tst.l d2
bne.b GM_2
move.w d0,d2
lea GM_errorMsg(pc),a0
bsr ProduceError
tst.w d0
beq GM_3
move.l d5,d0
move.l d6,d1
bra.b GM_1
GM_2 andi.b #E_PLACE,d0
beq.b GM_3
moveq #R_MEMORY,d0
moveq #rmr_SIZEOF,d1
bsr Res_PlaceList
move.l d5,rm_memSize(a0)
GM_3 move.l d2,d0
movem.l (sp)+,d2/d5-d6/a0-a1/a6
rts
GM_errorMsg dc.b 'Could not allocate enough memory.',0
;**********************************************************************
;a1 = libName
;d0 = version No.
;d1.w = Flags
;return = d0
XDEF _R_OpenLibrary
XDEF @R_OpenLibrary
_R_OpenLibrary
@R_OpenLibrary
R_OpenLibrary:
movem.l d2-d5/a0/a6,-(sp)
move.l d0,d3
move.w d1,d5
move.l a1,d4
move.l 4.w,a6
R_OP1a jsr _LVOOpenLibrary(a6)
move.l d0,d2
bne R_OP1
lea R_OP_msg1(pc),a0
lea textArea,a1
bsr StrCpy
move.l d4,a0
bsr StrCpy
lea R_OP_msg2(pc),a0
bsr StrCpy
move.l d3,d0
bsr itoa
lea R_OP_msg3(pc),a0
bsr StrCpy
clr.b (a1)
lea textArea,a0
move.w d5,d0
bsr ProduceError
tst.w d0
beq R_OP2
move.l d3,d0
move.l d4,a1
bra R_OP1a
R_OP1 andi.w #E_PLACE,d5
beq R_OP2
moveq #R_LIBRARY,d0
moveq #rl_SIZEOF,d1
bsr Res_PlaceList
R_OP2 move.l d2,d0
movem.l (sp)+,a0/d2-d5/a6
rts
R_OP_msg1 dc.b 'Could not open library "',0
R_OP_msg2 dc.b '" V',0
R_OP_msg3 dc.b '.',0
;**********************************************************************
cnop 0,4
;d0 = msgFlags
;return = d0
XDEF _R_NewMsgPort
XDEF @R_NewMsgPort
_R_NewMsgPort
@R_NewMsgPort
R_NewMsgPort:
movem.l d1-d3/a0-a1/a6,-(sp)
move.w d0,d3
move.l 4.w,a6
R_NMP3 jsr _LVOCreateMsgPort(a6)
move.l d0,d2
bne R_NMP1
lea R_NMP_errorMsg(pc),a0
move.l d3,d0
bsr ProduceError
tst.l d0
beq R_NMP2
bra R_NMP3
R_NMP1 andi.b #E_PLACE,d3
beq R_NMP2
moveq #R_MSGPORT,d0
moveq #rl_SIZEOF,d1
bsr Res_PlaceList
R_NMP2 move.l d2,d0
movem.l (sp)+,d1-d3/a0-a1/a6
rts
R_NMP_errorMsg dc.b 'Could not allocate message port.',0
;**********************************************************************
cnop 0,4
;a0 = MsgPort
;d0 = size
;d1 = ioFlags
;return = d0
XDEF _R_NewIORequest
XDEF @R_NewIORequest
_R_NewIORequest
@R_NewIORequest
R_NewIORequest:
movem.l d2-d4/a1-a2/a6,-(sp)
move.l a0,a2
move.l d0,d3
move.w d1,d4
move.l 4.w,a6
R_NIO1 jsr _LVOCreateIORequest(a6)
move.l d0,d2
bne R_NIO2
lea R_NIO_errorMsg(pc),a0
move.l d4,d0
bsr ProduceError
tst.l d0
beq R_NIO3
move.l a2,a0
move.l d3,d0
bra R_NIO1
R_NIO2 andi.b #E_PLACE,d4
beq R_NIO3
moveq #R_IOREQUEST,d0
moveq #rl_SIZEOF,d1
bsr Res_PlaceList
R_NIO3 move.l d2,d0
movem.l (sp)+,d2-d4/a1-a2/a6
rts
R_NIO_errorMsg dc.b 'Could not create IO port',0
;**********************************************************************
;a0 = device name
;d0 = device unit
;a1 = ioRequest
;a2 = devF
;d1 = device flags
;d2 = flags
cnop 0,4
XDEF _OpenDeviceRes
XDEF @OpenDeviceRes
_OpenDeviceRes
@OpenDeviceRes
OpenDeviceRes:
movem.l d3-d5/a3-a4/a6,-(sp)
move.l a0,a4
move.l a1,a3
move.l d0,d3
move.l d1,d4
move.l 4.w,a6
ODR_1 jsr _LVOOpenDevice(a6)
move.l d0,d5
beq ODR_2
lea textArea,a1
lea ODR_msg1(pc),a0
bsr StrCpy
move.l a4,a0
bsr StrCpy
lea ODR_msg2(pc),a0
bsr StrCpy
move.l d3,d0
bsr itoa
lea ODR_msg3(pc),a0
bsr StrCpy
clr.b (a1)
lea textArea,a0
move.l d2,d0
bsr ProduceError
tst.l d0
beq ODR_3
move.l a4,a0
move.l a3,a1
move.l d3,d0
move.l d4,d1
bra ODR_1
ODR_2 andi.b #E_PLACE,d2
beq ODR_3
moveq #R_DEVICE,d0
moveq #rd_SIZEOF,d1
move.l a3,d2
bsr Res_PlaceList
move.l a2,rd_checkFlag(a0)
ODR_3 move.l d5,d0
movem.l (sp)+,d3-d5/a3-a4/a6
rts
ODR_msg1 dc.b 'Could not open "',0
ODR_msg2 dc.b '" unit-',0
ODR_msg3 dc.b '.',0
;**********************************************************************
cnop 0,4
;d0 = signalNum
;d1 = flags
;return = d0
XDEF _NewSignal
XDEF @NewSignal
_NewSignal
@NewSignal
NewSignal:
movem.l d2-d4/a0-a1/a6,-(sp)
move.w d0,d3
move.w d1,d4
move.l 4.w,a6
NS_1 jsr _LVOAllocSignal(a6)
move.l d0,d2
tst.b d0
bpl NS_2
lea NS_errorMsg(pc),a0
move.l d4,d0
bsr ProduceError
tst.w d0
beq NS_3
move.w d3,d0
bra NS_1
NS_2 andi.b #E_PLACE,d4
beq NS_3
moveq #R_SIGNAL,d0
moveq #rl_SIZEOF,d1
bsr Res_PlaceList
NS_3 move.l d2,d0
movem.l (sp)+,d2-d4/a0-a1/a6
rts
NS_errorMsg dc.b 'Could not allocate signal bit',0
;**********************************************************************
cnop 0,4
;d0 = byteSize
;d1 = attributes
;d2 = flag
;return = d0
XDEF _GetVec
XDEF @GetVec
_GetVec
@GetVec
GetVec:
movem.l d3-d5/a0-a1/a6,-(sp)
move.l d0,d3
move.l d1,d4
move.w d2,d5
move.l 4.w,a6
GV_1 jsr _LVOAllocVec(a6)
move.l d0,d2
bne GV_2
lea GV_errorMsg(pc),a0
move.l d5,d0
bsr ProduceError
tst.w d0
beq GV_3
move.l d3,d0
move.l d4,d1
bra GV_1
GV_2 andi.w #E_PLACE,d5
beq GV_3
moveq #R_VEC,d0
moveq #rl_SIZEOF,d1
bsr Res_PlaceList
GV_3 move.l d2,d0
movem.l (sp)+,d3-d5/a0-a1/a6
rts
GV_errorMsg dc.b 'Not enough memory aviable.',0
;**********************************************************************
cnop 0,4
;a0 = source
;a1 = destination
StrCpy:
move.b (a0)+,d0
beq ST_E
move.b d0,(a1)+
bra StrCpy
ST_E rts
;**********************************************************************
;d0.l = number
;a1 = string buffer
itoa: movem.l d1-d2/a0,-(sp)
lea textAreaB,a0
tst.l d0
bpl itoa_1a
move.b #'-',(a1)+
itoa_1a moveq #0,d2
itoa_1 divul.l #10,d1:d0
addi.b #$30,d1
move.b d1,(a0)+
addq.w #1,d2
tst.l d0
bne itoa_1
subq.w #1,d2
itoa_2 move.b -(a0),(a1)+
dbra d2,itoa_2
movem.l (sp)+,d1-d2/a0
rts
;**********************************************************************
;d0 = type
;d1 = sizeof
;d2.l = item
;return = a0
;scrap d0,d1
XDEF _Res_PlaceList
XDEF @Res_PlaceList
_Res_PlaceList
@Res_PlaceList
Res_PlaceList:
movem.l d3-d4/a1,-(sp)
move.w d0,d3
move.l d2,d4
move.l d1,d0
moveq #1,d1
move.w #E_RETRYERROR,d2
bsr GetMem
move.l d0,a0
tst.l d0
beq.w RPL_1
tst.l resList(pc)
bne RPL_1a
move.l d0,resList
clr.l rl_prev(a0)
bra.w RPL_3
RPL_1a move.l resNext(pc),a1
move.l d0,rl_next(a1)
move.l a1,rl_prev(a0)
RPL_3 move.l a0,resNext
clr.l rl_next(a0)
move.w d3,rl_type(a0)
move.l d4,rl_item(a0)
bra.b RPL_4
RPL_1 lea RPL_errorMsg(pc),a0
bsr FatalError
RPL_4 move.l d4,d2
movem.l (sp)+,a1/d3-d4
rts
RPL_errorMsg dc.b 'Not enough memory available.',0
;**********************************************************************
cnop 0,4
XDEF _ActivateNewResource
XDEF @ActivateNewResource
_ActivateNewResource
@ActivateNewResource
ActivateNewResource:
bsr AllocResource
bsr ActivateResource
rts
;**********************************************************************
XDEF _AllocResource
XDEF @AllocResource
_AllocResource
@AllocResource
AllocResource:
movem.l d1-d2/a0-a1,-(sp)
moveq #rma_SIZEOF,d0
move.l #MEMF_PUBLIC|MEMF_CLEAR,d1
moveq #E_FATALERROR,d2
bsr GetMem
move.l d0,a1
moveq #rma_SIZEOF,d0
move.l #MEMF_PUBLIC|MEMF_CLEAR,d1
moveq #E_FATALERROR,d2
bsr GetMem
move.l mainList(pc),a0
tst.l a0
beq AR_1
AR_1a move.l rma_next(a0),d1
beq AR_1b
move.l d1,a0
bra AR_1a
AR_1b move.l a0,rma_prev(a1)
move.l a1,rma_next(a0)
bra AR_2
AR_1 move.l a1,mainList
AR_2 move.l d0,rma_resList(a1)
move.l d0,a0
move.w #R_BLANK,rl_type(a0)
movem.l (sp)+,d1-d2/a0-a1
rts
;**********************************************************************
;d0 = oldList
XDEF _RemoveResource
XDEF @RemoveResource
_RemoveResource
@RemoveResource
RemoveResource:
movem.l d1-d3/a0-a2/a6,-(sp)
move.l mainList(pc),a2
tst.l a2
beq RR_E
RR_1 cmp.l rma_resList(a2),d0
bne RR_3
move.l resList(pc),d2
move.l resNext(pc),d3
bsr ActivateResource
bsr Res_FreeResource
move.l rma_prev(a2),a0
move.l rma_next(a2),a1
tst.l a1
beq RR_4
move.l a0,rma_prev(a1)
RR_4 tst.l a0
beq RR_5
move.l a1,rma_next(a0)
RR_5 move.l 4.w,a6
move.l a2,a1
moveq #rma_SIZEOF,d0
jsr _LVOFreeMem(a6)
move.l d2,resList
move.l d3,resNext
bra RR_E
RR_3 move.l rma_next(a2),a2
tst.l a2
bne RR_1
RR_E movem.l (sp)+,d1-d3/a0-a2/a6
rts
;**********************************************************************
;d0 = actList
XDEF _ActivateResource
XDEF @ActivateResource
_ActivateResource
@ActivateResource
ActivateResource:
movem.l d0/a0,-(sp)
move.l mainList(pc),a0
tst.l a0
beq ARe_E
ARe_1 cmp.l rma_resList(a0),d0
bne ARe_2
move.l rma_resList(a0),a0
move.l a0,resList
ARe_4 move.l rl_next(a0),d0
beq ARe_3
move.l d0,a0
bra ARe_4
ARe_3 move.l a0,resNext
bra ARe_E
ARe_2 move.l rma_next(a0),a0
tst.l a0
bne ARe_1
ARe_E movem.l (sp)+,d0/a0
rts
;**********************************************************************
XDEF _FreeAll
XDEF @FreeAll
_FreeAll
@FreeAll
FreeAll:
movem.l d0-d1/a0-a2/a6,-(sp)
move.l 4.w,a6
move.l mainList(pc),a2
tst.l a2
beq FA_E
FA_1 move.l rma_next(a2),d0
beq FA_2
move.l d0,a2
bra FA_1
FA_2 move.l rma_resList(a2),d0
bsr ActivateResource
bsr Res_FreeResource
move.l a2,a1
move.l rma_prev(a1),a2
moveq #rma_SIZEOF,d0
jsr _LVOFreeMem(a6)
tst.l a2
bne FA_2
FA_E movem.l (sp)+,d0-d1/a0-a2/a6
rts
;**********************************************************************
XDEF _Res_FreeResource
XDEF @Res_FreeResource
_Res_FreeResource
@Res_FreeResource
Res_FreeResource:
movem.l d0-d1/a0-a3/a6,-(sp)
move.l resNext(pc),a2
lea R_jmpTab(pc),a3
R_1 tst.l a2
beq R_E
move.l 4.w,a6
move.w rl_type(a2),d0
move.l (d0.w*4,a3),d0
R_jmp jmp (pc,d0.l)
R_mem move.l rl_item(a2),a1
move.l rm_memSize(a2),d0
jsr _LVOFreeMem(a6)
moveq #rmr_SIZEOF,d0
bra R_2
R_scr move.l _IntuitionBase(pc),a6
move.l rl_item(a2),a0
jsr _LVOCloseScreen(a6)
moveq #rl_SIZEOF,d0
bra R_2
R_lib move.l rl_item(a2),a1
jsr _LVOCloseLibrary(a6)
moveq #rl_SIZEOF,d0
bra R_2
R_bla moveq #rl_SIZEOF,d0
bra R_2
R_msg move.l rl_item(a2),a0
jsr _LVODeleteMsgPort(a6)
moveq #rl_SIZEOF,d0
bra R_2
R_ior move.l rl_item(a2),a0
jsr _LVODeleteIORequest(a6)
moveq #rl_SIZEOF,d0
bra R_2
R_dev move.l rd_checkFlag(a2),a1
tst.b (a1)
beq R_dev1
move.l rl_item(a2),a1
jsr _LVOCheckIO(a6)
tst.l d0
bne R_dev1
move.l rl_item(a2),a1
jsr _LVOAbortIO(a6)
move.l rl_item(a2),a1
jsr _LVOWaitIO(a6)
R_dev1 move.l rl_item(a2),a1
jsr _LVOCloseDevice(a6)
moveq #rd_SIZEOF,d0
bra R_2
R_fun move.l rl_item(a2),a1
jsr (a1)
moveq #rl_SIZEOF,d0
bra R_2
R_vec move.l rl_item(a2),a1
jsr _LVOFreeVec(a6)
moveq #rl_SIZEOF,d0
bra R_2
R_sig move.l rl_item(a2),d0
jsr _LVOFreeSignal(a6)
moveq #rl_SIZEOF,d0
bra R_2
R_clo move.l rl_item(a2),d1
move.l _DOSBase(pc),a6
jsr _LVOClose(a6)
moveq #rl_SIZEOF,d0
bra R_2
R_vis move.l rl_item(a2),a0
move.l _GadToolsBase(pc),a6
jsr _LVOFreeVisualInfo(a6)
moveq #rl_SIZEOF,d0
bra R_2
R_men move.l rl_item(a2),a0
move.l _GadToolsBase(pc),a6
jsr _LVOFreeMenus(a6)
moveq #rl_SIZEOF,d0
bra R_2
R_win move.l rl_item(a2),a0
move.l _IntuitionBase(pc),a6
jsr _LVOCloseWindow(a6)
moveq #rl_SIZEOF,d0
bra R_2
R_mes move.l rl_item(a2),a0
move.l _IntuitionBase(pc),a6
jsr _LVOClearMenuStrip(a6)
moveq #rl_SIZEOF,d0
bra R_2
R_unl move.l rl_item(a2),a1
suba.l a0,a0
move.l _IntuitionBase(pc),a6
jsr _LVOUnlockPubScreen(a6)
moveq #rl_SIZEOF,d0
bra R_2
R_bmp move.l rl_item(a2),a1
suba.l a0,a0
move.l _GfxBase(pc),a6
jsr _LVOFreeBitMap(a6)
moveq #rl_SIZEOF,d0
bra R_2
R_2 move.l a2,a1
move.l rl_prev(a1),a2
move.l 4.w,a6
jsr _LVOFreeMem(a6)
bra R_1
R_E movem.l (sp)+,d0-d1/a0-a3/a6
rts
R_jmpTab dc.l R_mem-R_jmp-2
dc.l R_scr-R_jmp-2
dc.l R_lib-R_jmp-2
dc.l R_bla-R_jmp-2
dc.l R_msg-R_jmp-2
dc.l R_ior-R_jmp-2
dc.l R_dev-R_jmp-2
dc.l R_fun-R_jmp-2
dc.l R_vec-R_jmp-2
dc.l R_sig-R_jmp-2
dc.l R_clo-R_jmp-2
dc.l R_vis-R_jmp-2
dc.l R_men-R_jmp-2
dc.l R_win-R_jmp-2
dc.l R_mes-R_jmp-2
dc.l R_unl-R_jmp-2
dc.l R_bmp-R_jmp-2
;**********************************************************************
cnop 0,4
;d0 = errorFlags
;a0 = errorMsg Ptr.
;d0 = return( 0=DON'T TRY AGAIN , 1=TRY AGAIN )
XDEF _ProduceError
XDEF @ProduceError
_ProduceError
@ProduceError
ProduceError:
move.l d1,-(sp)
move.w d0,d1
andi.b #E_NOTIFYERROR,d1
beq PE_1
bsr NotifyError
moveq #0,d0
bra PE_E
PE_1 move.w d0,d1
andi.b #E_RETRYERROR,d1
beq PE_2
bsr RetryError
bra PE_E
PE_2 andi.b #E_FATALERROR,d0
beq PE_3
bsr FatalError
PE_3 moveq #0,d0
PE_E move.l (sp)+,d1
rts
;**********************************************************************
;a0 = errorMsg
;return = d0
XDEF _RetryError
XDEF @RetryError
_RetryError
@RetryError
RetryError:
movem.l d1/a1-a3/a6,-(sp)
move.l _IntuitionBase(pc),a6
tst.l a6
beq RE_E
lea RE_easy(pc),a1
move.l a0,12(a1)
suba.l a0,a0
suba.l a2,a2
suba.l a3,a3
jsr _LVOEasyRequestArgs(a6)
RE_E movem.l (sp)+,d1/a1-a3/a6
rts
RE_easy dc.l 20,0,RE_title,0,RE_msg
RE_title dc.b 'Error',0
RE_msg dc.b 'Retry|Cancel',0
;**********************************************************************
cnop 0,4
XDEF _NotifyError
XDEF @NotifyError
_NotifyError
@NotifyError
NotifyError:
movem.l d1/a1-a3/a6,-(sp)
move.l _IntuitionBase(pc),a6
tst.l a6
beq NE_E
lea NE_easy(pc),a1
move.l a0,12(a1)
suba.l a0,a0
suba.l a2,a2
suba.l a3,a3
jsr _LVOEasyRequestArgs(a6)
NE_E movem.l (sp)+,d1/a1-a3/a6
rts
NE_easy dc.l 20,0,NE_title,0,NE_msg
NE_title dc.b 'Message',0
NE_msg dc.b 'OK',0
;**********************************************************************
cnop 0,4
XDEF _FatalError
XDEF @FatalError
_FatalError
@FatalError
FatalError:
movem.l d0-d1/a1-a3/a6,-(sp)
move.l _IntuitionBase(pc),a6
tst.l a6
beq FE_1
lea FE_easy(pc),a1
move.l a0,12(a1)
suba.l a0,a0
suba.l a2,a2
suba.l a3,a3
jsr _LVOEasyRequestArgs(a6)
bsr FreeAll
FE_1 move.l originalStack(pc),d0
beq FE_2
move.l d0,sp
rts
FE_2 lea FE_dosname(pc),a1
moveq #0,d0
moveq #E_RETRYERROR,d1
bsr R_OpenLibrary
tst.l d0
beq FE_3
move.l d0,a6
moveq #-1,d0
jsr _LVOExit(a6)
FE_3 movem.l (sp)+,d0-d1/a1-a3/a6
rts
FE_easy dc.l 20,0,FE_title,0,FE_msg
FE_title dc.b 'Fatal Error',0
FE_msg dc.b 'OK',0
FE_dosname dc.b 'dos.library',0
;**********************************************************************
section resource_data,bss
textArea ds.b 200
textAreaB ds.b 100